Otázka č. 23 - Typy DBMS, zamykání tabulek, DCL a TCL SQL
Typy DBMS
- DBSM (Database Management System) je systém, který umožňuje uživatelům vytvářet, udržovat a manipulovat s databázemi.
1. RDBMS (Relational Database Management System)
-
Založen na relačním modelu dat
-
Ukládání dat do tabulek
-
Vztahy vyjádřeny klíči
-
Pro manipulaci slouží SQL
-
Př:
MySQL, Oracle, Microsoft SQL Server
2. OODBMS (Object-Oriented Database Management System)
-
Ukládání dat ve formě objektů
-
Objekty mohou obsahovat metody a atributy
-
Vhodný pro aplikace s komplexními datovými strukturami
-
Př:
ObjectDB, db4o
3. ORDBMS (Object-Relational Database Management System)
- Kombinuje vlastnosti relačních a objektově orientovaných DB
- umožňnuje ukládat strukturovaná data jako v relačních DB, ale také zahrnuje objektové funkce a datové typy
- Př:
PostgreSQL, Oracle
4. NoSQL
- Navrženy pro ukládání, zpracování a získávání dat, která nejsou dobře modelovatelná v rámci relačního schématu
Př: MongoDB, Cassandra, Redis
5. GraphDB
- Navržená pro práci s daty reprezentovanými ve formě grafů
- Matimatické struktury skládájicí se z uzlů spojenými hranami, které mohou reprezentovat různé vztahy mezi daty
Př: Neo4j, Microsoft Azure Cosmos DB
6. TSDB
-
Optimalizovaný pro ukládání a dotazování nad časově řadovými daty
-
Data jsou uspořádána podle časového razítka
-
Telemetrická data, výkazy měření, záznamy senzorů
-
Př:
InfluxDB, Prometheus
Zamykání tabulek
- Mechanismus, který zajišťuje, že operace s databází, jako jsou čtení a zápis, aktualizace a odstranění, jsou prováděny atomicky, konzistentně a trvale
- Zamykání tabulek může být provedeno pomocí příkazu
LOCK TABLE - Režimy zamykání:
ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE - Uvolnění zámku z tabulky -
UNLOCK TABLE WAIT- pokud je zámek zamčen, čeká na jeho uvolněníNOWAIT- pokud je zámek zamčen, vrátí chybu
-- Zamknutí tabulky
LOCK TABLE my_table IN EXCLUSIVE MODE;
-- Provedení operace nad zamčenou tabulkou
SELECT * FROM my_table;
UPDATE my_table SET column1 = value1 WHERE condition;
DELETE FROM my_table WHERE condition;
-- Odemknutí tabulky
UNLOCK TABLE my_table;
Bezpečnost
User
- vytvoření uživatele
-- vyvtvoření uživatele
CREATE USER 'NázevUčtu'@‘Síť, ze které se může připojit' IDENTIFIED BY 'heslo‘;
CREATE USER 'Vojta'@'localhost' IDENTIFIED BY 'tajneheslo123'
- Vytvoření uživatele s použitím autentizačního pluginu pro zahashovaní hesla, heslo po 180 dnech vyprší, má 3 pokusy na přihlášení, jinak se učet zablokuje na 2 dny
CREATE USER 'Vojta'@'localhost' IDENTIFIED WITH catching_sha2_password BY 'tajneheslo' PASSWORD EXPIRE INTERVAL 180 DAY FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
- Vytvoření uživatele, který potřebuje platný ssl certifikát
CREATE USER 'Vojta'@'localhost' REQUIRE SSL;
- Vytvoření uživatele s omezením na DDL dotazy
CREATE USER 'Vojta'@'localhost' WITH MAX_QUERIES_PER_HOUR 100 MAX_UPDATES_PER_HOUR 100;
- Vytvoření uživatele, kterému je zakázáno používat 6 nejnovějších hesel, které měl
CREATE USER 'Vojta'@'localhost' PASSWORD HISTORY 6;
- Odstranění uživalete
DROP USER 'Vojta'@'localhost';
- Změna uživatele
RENAME USER 'Vojta'@'localhost' TO 'Vojta2'@'localhost';
Salt
- Unikátní a náhodný řetězec, který nemusí být tajný a může být uložen vedle hashu hesla v databázi
Pepper
- Aplikováno před hashováním
- Uložen odděleně od databáze, např. ve formě konfiguračního souboru
Hashovací funkce
- o Pomocí algoritmu vytvoří zahashované heslo pevné délky, které nelze převést na původní heslo, SHA2 (Sha-512, Sha-384, Sha-256)
DCL SQL
- Sada příkazů, které se týkají práv, oprávnění a dalších kontrol v rámci databázového systému
GRANT
- Slouží k udělení oprávnění uživatelům nebo rolím, povolit přístup k určitým tabulkám, pohledům, uloženým procedurám a funkcím
GRANT ALL ON my_table TO 'Vojta'@'localhost';
GRANT 'role' TO 'Vojta'@'localhost';
GRANT SELECT, INSERT, UPDATE ON my_table TO 'role';
REVOKE
- Slouží k odebrání oprávnění, které byla udělena pomocí GRANT, omezí přístup uživatelů k určitým tabulkám, pohledům, uloženým procedurám a funkcím
REVOKE ALL ON my_table FROM 'Vojta'@'localhost';
REVOKE 'role' FROM 'Vojta'@'localhost';
REVOKE SELECT, INSERT, UPDATE ON my_table FROM 'role';
DENY
- o Slouží k explicitnímu zakázaní přístupu k objektům v databázi, uživatelé nebo role nebudou mít oprávnění i když jim byla udělena pomocí GRANT
ROLE
- Skupina oprávnění, které mohou být uděleny uživatelům, výhoda nemusí se nastavovat každý uživatel a stačí jemu přidělá role
CREATE ROLE 'role';
CREATE ROLE 'webapp'@'localhost';
transakce, savepointy a pravidlo ACID
TRANSAKCE
- Skupina příkazů, které buď proběhnou úspěšně celé, nebo se žádná z nich neuskuteční
- Typické operace v rámci transakce zahrnují vkládání, aktualizaci nebo mazání dat.
- Transakce musí být atomické, konzistentní, izolované a trvalé, což odpovídá pravidlu ACID.
ACID
- A - Atomicity (Atomičnost)
- Transakce musí být atomické, buď proběhnou všechny příkazy nebo žádný
- C - Consistency (Konzistence)
- Musí zajistit, že data budou před provedení transakce v konzistentním stavu. To znamená, že transakce musí respektovat všechna pravidla integrity dat
- I - Isolation (Izolace)
- Neměla by ovlivňovat provádění jiných transakcí. Měly by pracovat nezávisle na ostatních
- D - Durability (Trvalost)
- Po úspěšném dokončení transakce musí být změny v databázi trvalé a odolné vůči poruchám systému
SAVEPOINT
- Bod v rámci transakce, na které lze nahlížet jako na mezi stav
- Umožňují provádět části transakce nezávisle na celku
- Ukládání stavu transakce v průběhu provádění, aby bylo možné provést částečné zrušení až k určitému bodu
START TRANSACTION;
SELECT * FROM EMP;
UPDATE EMP SET AGE = AGE + 1;
SAVEPOINT samplesavepoint;
INSERT INTO EMP ('Mac', 'Mohan', 25, 'M', 2000);
ROLLBACK TO SAVEPOINT samplesavepoint;
COMMIT;
TCL SQL
- Skupina příkazů, které se používají k řízení transakcí
- Umožňují provádět operace jako zahájení, ukončení a správu transakcí
COMMIT
- Příkaz, který potvrzuje všechny změny provedené v rámci aktuální transakce a trvale je zapisuje do databáze
ROLLBACK
- Používá se ke zrušení všech změn provedených v aktuální transakci od posledního commitu
SAVEPOINT
- Vytvoření bodu uvnitř transakce, ke kterému můžeme později provést rollback
- Transakce se vrátí k tomuto bodu, aniž by byly zrušeny všechny změny provedené po vytvoření savepointu
SET TRANSACTION
- Slouží k nastavení vlastností transakce, jako je izolace, úroveň izolace, zamykání atd
START TRANSACTION
- Slouží k zahájení nové transakce
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
START TRANSACTION
ROLLBACK;
RESIGNAL;
END;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
IF(SELECT balance FROM accounts WHERE account_id = 1) < 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insufficient funds';
END IF;
COMMIT;